package br.com.Dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.Conexao.conexao;
import br.com.Modelo.UsuarioCliente;
import br.com.Modelo.UsuarioComerciante;

public class UsuarioClienteDao {

	
	
	  private Connection connection;

	    public UsuarioClienteDao() {
	      this.connection = new conexao().getConnection();
	    }
	    
	    public void adiciona(UsuarioCliente usuario) {
	    	
	    	//if(isLoginEqual(usuario)==false){
		    String sql = "insert into tb_usuario_cliente " +
		            "(nome,login,senha,endereco,telefone,autenticacao,email,data_criacao)" +
		            " values (?,?,?,?,?,?,?,?)";

		    try {
		        // prepared statement para inserção
		        PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);

		        // seta os valores

		        stmt.setString(1,usuario.getNome());
		        stmt.setString(2,usuario.getLogin());
		        stmt.setString(3,usuario.getSenha());
		        stmt.setString(4,usuario.getEnd());
		        stmt.setString(5,usuario.getTelefone());
		        stmt.setInt(6,1);
		        stmt.setString(7,usuario.getEmail());
		        
		        Calendar c = Calendar.getInstance();
		        Date datesql = new Date(c.getTimeInMillis());
		        stmt.setDate(8,datesql);
		   

		        // executa
		        stmt.execute();
		        System.out.print("add com sucesso");
		        stmt.close();
		    } catch (SQLException e) {
		        throw new RuntimeException(e);
		    }
	    	//}else{
	    	//    System.out.print("Ja existe um usuario com esse login!");
	    //	}
		}
	    
	    
	    public int verificaUsuario(String login , String email){
	    	  
	    	
	    	try {	
				
				PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select idUsuarioCliente from tb_usuario_cliente where login='"+login+"' or email='"+email+"'");
				ResultSet rs= stmt.executeQuery(); 
				if(rs.next()){
	                	 
	                	 return 1;
	                	 
	                 }		
			    	 
				
					stmt.close();
					//connection.close();
				  
				 } catch (SQLException e) {
				         throw new RuntimeException(e);
				  }
	    
	    	
	    	return 0;
	    }
	    
    public int verificaUsuario(Long id_user , String login , String email){
	    	  
	    	
	    	try {	
				
				PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select idUsuarioCliente from tb_usuario_cliente where login='"+login+"' and idUsuarioCliente!='"+id_user+"' or email='"+email+"' and idUsuarioCliente!='"+id_user+"'");
				ResultSet rs= stmt.executeQuery(); 
				if(rs.next()){
	                	 
	                	 return 1;
	                	 
	                 }		
			    	 
				
					stmt.close();
					//connection.close();
				  
				 } catch (SQLException e) {
				         throw new RuntimeException(e);
				  }
	    
	    	
	    	return 0;
	    }
	    
	    public List<UsuarioCliente> getLista() {
		try {	
		List<UsuarioCliente> clientes = new ArrayList<UsuarioCliente>();
		PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select * from tb_usuario_cliente");
		ResultSet rs= stmt.executeQuery();
		
			while(rs.next()){
			    UsuarioCliente cliente = new UsuarioCliente();
			    cliente.setId(rs.getLong("idUsuarioCliente"));
			    cliente.setNome(rs.getString("nome"));
			    cliente.setLogin(rs.getString("login"));
			    cliente.setSenha(rs.getString("senha"));
			    cliente.setEnd(rs.getString("endereco"));
			    cliente.setTelefone(rs.getString("telefone"));
			    cliente.setAutenticacao(Integer.parseInt(rs.getString("autenticacao")));
			    cliente.setEmail(rs.getString("email"));    
		
			      clientes.add(cliente);
		        }
			rs.close();
			stmt.close();
			connection.close();
		     return clientes;
		 } catch (SQLException e) {
		         throw new RuntimeException(e);
		  }
	    }
	    
	    public boolean isLoginEqual(UsuarioCliente usuario) {
			try {	
			List<UsuarioCliente> clientes = new ArrayList<UsuarioCliente>();
			PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement("select login from tb_usuario_cliente where login='"+usuario.getLogin()+"'");
			ResultSet rs= stmt.executeQuery();
		  // System.out.print(rs.getFetchSize());
				if(rs.next()){		
				   		  
			          return true;			
			      }
				rs.close();
				stmt.close();
				connection.close();
			     return false;
			 } catch (SQLException e) {
			         throw new RuntimeException(e);
			  }
		    }
	    
	    public int validaAutenticacao(String login , String senha){
	    	
	    	PreparedStatement stmt;
			try {
				stmt = (PreparedStatement) this.connection.prepareStatement("select autenticacao from  tb_usuario_cliente a  where a.login='"+login+"' and a.senha='"+senha+"'");
				ResultSet rs= stmt.executeQuery();
				
				while(rs.next()){
				   // UsuarioCliente cliente = new UsuarioCliente();
				    ///cliente.setId(rs.getLong("idUsuarioCliente"));	
					
					
				      int autentica = Integer.parseInt(rs.getString("autenticacao"));				    
			          return autentica;
				     
			        }
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
	    	
			return 0;
	    	
	    	
	    	
	    }
	
  public UsuarioCliente validaAutenticacaoUser(String login , String senha){
	    	
	    	PreparedStatement stmt;
			try {
				stmt = (PreparedStatement) this.connection.prepareStatement("select * from  tb_usuario_cliente a  where a.login='"+login+"' and a.senha='"+senha+"'");
				ResultSet rs= stmt.executeQuery();
				
				while(rs.next()){
				     
				    UsuarioCliente cliente = new UsuarioCliente();
				    cliente.setId(rs.getLong("idUsuarioCliente"));
				    cliente.setNome(rs.getString("nome"));
				    cliente.setLogin(rs.getString("login"));
				    cliente.setSenha(rs.getString("senha"));
				    cliente.setEnd(rs.getString("endereco"));
				    cliente.setTelefone(rs.getString("telefone"));
				    cliente.setAutenticacao(Integer.parseInt(rs.getString("autenticacao")));   
					cliente.setEmail(rs.getString("email"));	    
			          return cliente;
				     
			        }
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
	    	
			return null;
	    	
	    	
	    	
	    }
  //buscar usuario via id
  public UsuarioCliente validaAutenticacaoUser(Long id){
  	
  	PreparedStatement stmt;
		try {
			stmt = (PreparedStatement) this.connection.prepareStatement("select * from  tb_usuario_cliente a  where a.idUsuarioCliente='"+id+"'");
			ResultSet rs= stmt.executeQuery();
			
			while(rs.next()){
			     
			    UsuarioCliente cliente = new UsuarioCliente();
			    cliente.setId(rs.getLong("idUsuarioCliente"));
			    cliente.setNome(rs.getString("nome"));
			    cliente.setLogin(rs.getString("login"));
			    cliente.setSenha(rs.getString("senha"));
			    cliente.setEnd(rs.getString("endereco"));
			    cliente.setTelefone(rs.getString("telefone"));
			    cliente.setAutenticacao(Integer.parseInt(rs.getString("autenticacao")));
			    cliente.setEmail(rs.getString("email"));	   
						    
		          return cliente;
			     
		        }
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
  	
		return null;
  	
  	
  	
  }
  
  public UsuarioCliente validaAutenticacaoUser(Long id , int autentica){
	  	
	  	PreparedStatement stmt;
			try {
				stmt = (PreparedStatement) this.connection.prepareStatement("select * from  tb_usuario_cliente a  where a.idUsuarioCliente='"+id+"' and autenticacao='"+autentica+"'");
				ResultSet rs= stmt.executeQuery();
				
				while(rs.next()){
				     
				    UsuarioCliente cliente = new UsuarioCliente();
				    cliente.setId(rs.getLong("idUsuarioCliente"));
				    cliente.setNome(rs.getString("nome"));
				    cliente.setLogin(rs.getString("login"));
				    cliente.setSenha(rs.getString("senha"));
				    cliente.setEnd(rs.getString("endereco"));
				    cliente.setTelefone(rs.getString("telefone"));
				    cliente.setAutenticacao(Integer.parseInt(rs.getString("autenticacao")));   
				    cliente.setEmail(rs.getString("email"));
							    
			          return cliente;
				     
			        }
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
	  	
			return null;
	  	
	  	
	  	
	  }
  
  
public int getFirstIdUserCliente(){
	
	/*SELECT idUsuarioCliente id
	FROM tb_usuario_cliente
	WHERE idUsuarioCliente
	IN (

	SELECT MAX( idUsuarioCliente )
	FROM tb_usuario_cliente
	)*/
	  
	  String sql = "SELECT idUsuarioCliente id FROM tb_usuario_cliente WHERE idUsuarioCliente IN (SELECT MAX(idUsuarioCliente) FROM tb_usuario_cliente)";
	  
	  		try {	
			
			PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement(sql);
			ResultSet rs= stmt.executeQuery(); 
			if(rs.next()){
              	 
              	return rs.getInt("id");
              	 
          }		
		    	 
			
				stmt.close();
				//connection.close();
			  
			 } catch (SQLException e) {
			         throw new RuntimeException(e);
			  }
  
	  
	  
	  return -1;
	
}


   public Calendar getDateCriacao(long id_cliente){
	   
	   Calendar c = Calendar.getInstance();
	   
	   String sql = "SELECT data_criacao id FROM tb_usuario_cliente WHERE idUsuarioCliente="+id_cliente+"";
		  
 		try {	
		
		PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement(sql);
		ResultSet rs= stmt.executeQuery(); 
		if(rs.next()){
			c.setTime(rs.getDate("i"));
         	return c;
         	 
       }		
	    	 
		
			stmt.close();
			//connection.close();
		  
		 } catch (SQLException e) {
		         throw new RuntimeException(e);
		  }

		return null;	   
	   
	   
   }
   
   
   public void updateCliente(UsuarioCliente usuario){
		
	   String sql = "UPDATE tb_usuario_cliente SET nome=?, login=?, senha=?, endereco=?,telefone=?,email=? WHERE idUsuarioCliente=?";
	
	    try {
	        // prepared statement para inserção
	        PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);

	        // seta os valores

	        stmt.setString(1,usuario.getNome());
	        stmt.setString(2,usuario.getLogin());
	        stmt.setString(3,usuario.getSenha());
	        stmt.setString(4,usuario.getEnd());
	        stmt.setString(5,usuario.getTelefone());	        
	        stmt.setString(6,usuario.getEmail());
	        stmt.setLong(7,usuario.getId());
	        

	        // executa
	        stmt.executeUpdate();
	        System.out.print("atualizado com sucesso");
	        stmt.close();
	    } catch (SQLException e) {
	        throw new RuntimeException(e);
	    }
	
}


}
